﻿using System;
using System.Threading;
using System.Windows.Forms;

namespace Ycjw.PipeLine
{
    /****************************************************************************************/
    /*
    功    能:
    作    者: RenZachary
    联系方式: rzcgis@foxmail.com（QQ455745253）
    生成日期: 2021年3月24日
    修改日志: 
    版权说明: @2021 西安云创经纬信息科技有限公司 版权所有 All right reserved.
    注    意: 本内容仅限于云创经纬公司内部使用，禁止用于商业目的。
    */
    /****************************************************************************************/
    static class Program
    {
        public static Mutex m;
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                Commons.LogHelper.Info("系统启动");
                //设置应用程序处理异常方式：ThreadException处理
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                //处理UI线程异常
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                //处理非UI线程异常
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                bool createNew = false;
                using (m = new Mutex(true, Application.ProductName, out createNew))
                {
                    if (createNew)
                    {
                        m.ReleaseMutex();
                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        Application.Run(FormMainRibbon.Instance);
                    }
                    else
                    {
                        Sunny.UI.UIMessageBox.ShowInfo("软件正在运行中,请勿重复开启...");
                    }
                }
            }
            catch (Exception e)
            {
                Commons.LogHelper.Error(e);
            }
        }
        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Commons.LogHelper.Error(e.ExceptionObject as Exception);
        }

        private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
        {
            Commons.LogHelper.Error(e.Exception);
        }
    }
}
